﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using System.Windows.Shapes;
using AppGPS.Views.UControl;
using System.Threading.Tasks;
using Models;
using AppGPS.Helper;

namespace AppGPS.Views
{
    public partial class UIRegister : PhoneApplicationPage
    {
        CreateAccount account = new CreateAccount();
        CreateInfomation infomation = new CreateInfomation();
        CreateAccountFinish finish= new CreateAccountFinish();
        UserResult _userRegister = new UserResult();
        public UIRegister()
        {
            InitializeComponent();

            Mainframe.Children.Add(account);
        }
        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
            if(ListHeader.Items.Count>0)
            {
                ListHeader.SelectedIndex = 0;
            }            
        }
        private async void NextButton_Tap(object sender, RoutedEventArgs e)
        {
            bool bResult=true;
             switch(ListHeader.SelectedIndex)
            {
                case 0:

                    bResult = await Step0Check();
                    if (bResult == false) return;
                    break;
                case 1:

                    bResult = await Step1Check();
                    if (bResult == false) return;
                    break;
                case 2:
                    NavigationService.GoBack();
                    break;
            }
            BtnPreview.IsEnabled = true;
            if (ListHeader.SelectedIndex < ListHeader.Items.Count - 1)
            { 
                ListHeader.SelectedIndex++;
                Mainframe.Children.Clear();
                switch(ListHeader.SelectedIndex)
                {
                    case 0:
                         Mainframe.Children.Add(account); 
                         BtnPreview.IsEnabled = false;
                         break;
                    case 1: 
                        Mainframe.Children.Add(infomation); 
                        break;
                    case 2:
                        BtnNext.Content = "Kết thúc";
                        finish.txtUsername.Text = infomation.Fullname;
                        finish.Avatar.Source = ImageConvert.base64image(infomation.Avatar);
                        Mainframe.Children.Add(finish);
                        BtnPreview.IsEnabled = false;
                        break;
                }
            }
        }
        private void PreviewButton_Tap(object sender, RoutedEventArgs e)
        {
            BtnPreview.IsEnabled = true;
            if (ListHeader.SelectedIndex > 0)
            { 
                ListHeader.SelectedIndex--;
                Mainframe.Children.Clear();
                switch (ListHeader.SelectedIndex)
                {
                    case 0: 
                        Mainframe.Children.Add(account);
                        BtnPreview.IsEnabled = false;
                        break;
                    case 1:
                        BtnNext.Content = "Tiếp theo";
                        Mainframe.Children.Add(infomation);
                        break;
                }
            }
        }
        private void Cancel_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.GoBack();
        }
        private bool ContainsUnicodeCharacter(string input)
        {
            const int MaxAnsiCode = 255;

            return input.Any(c => c > MaxAnsiCode);
        }
        private async Task<bool> Step0Check()
        {
            if(ContainsUnicodeCharacter(account.Username))
            {
                UMessageBox.Show("Tài khoản không được dùng tiếng việt có dấu","Lỗi tài khoản");
                return false;
            }
            bool bCheck = await account.CompareUsername();

            if (bCheck == true)
            {
                UMessageBox.Show("Tài khoản đã tồn tại", "Lỗi tài khoản");
                return false;
            }
            if(account.ComparePassword()==false)
            {
                UMessageBox.Show("Mật khẩu không khớp nhau", "Lỗi mật khẩu");
                return false;
            }
            _userRegister = account.Data;
            return true;
        }
        private async Task<bool> Step1Check()
        {
            bool bCheck=await infomation.EmailCompare();

            if(bCheck==true)
            {
                UMessageBox.Show("Địa chỉ email đã tồn tại! vui lòng kiểm tra lại", "Lỗi Email");
                return false;
            }
            if (infomation.Fullname == "")
            {
                UMessageBox.Show("Vui lòng nhập họ và tên của bạn", "Lỗi họ tên");
                return false;
            }
            if(infomation.Phone=="")
            {
                UMessageBox.Show("Vui lòng nhập số điện thoại", "Lỗi số điện thoại");
                return false;
            }
            if (infomation.Avatar == "")
            {
                UMessageBox.Show("Vui lòng chọn ảnh đại diện của bạn", "Lỗi ảnh đại diện");
                return false;
            }
            _userRegister.UserInfo = infomation.Data;

            var Result= await account.CreateTask(_userRegister);

            return true;
        }
    }
}